package com.ai.plug.core.parser.tool.param;

import com.ai.plug.core.annotation.McpArg;
import org.springframework.util.StringUtils;

import java.lang.reflect.Method;
import java.lang.reflect.Parameter;

/**
 * 解析方法参数和必填性
 */

public class McpToolParamParser extends AbstractParamParser {
    /**
     * 解析方法参数的必填性
     *
     * @param method    工具方法
     * @param toolClass 工具类
     * @param index     参数索引
     * @return 参数是否必填，如果未找到注解则返回null
     */
    @Override
    public Boolean doParamRequiredParse(Method method, Class<?> toolClass, int index) {

        // 获取指定索引的参数
        Parameter parameter = method.getParameters()[index];
        // 尝试获取参数上的McpArg注解
        McpArg toolParamAnnotation = parameter.getAnnotation(McpArg.class);
        // 如果注解存在，则返回注解中定义的required值
        if (toolParamAnnotation != null) {
            return toolParamAnnotation.required();
        }

        // 如果没有找到注解，则返回null
        return null;
    }

    /**
     * 解析方法参数的描述信息
     *
     * @param method    工具方法
     * @param toolClass 工具类
     * @param index     参数索引
     * @return 参数描述信息，如果未找到注解或描述为空则返回null
     */
    @Override
    public String doParamDesParse(Method method, Class<?> toolClass, int index) {

        // 获取指定索引的参数
        Parameter parameter = method.getParameters()[index];

        // 尝试获取参数上的McpArg注解
        McpArg toolParamAnnotation = parameter.getAnnotation(McpArg.class);
        // 如果注解存在且描述不为空，则返回注解中定义的描述
        if (toolParamAnnotation != null && StringUtils.hasText(toolParamAnnotation.description())) {
            return toolParamAnnotation.description();
        }

        // 如果没有找到注解或描述为空，则返回null
        return null;
    }
}
